/*
 * 编写一个程序，提示用户输入旅行的里程和消耗的汽油量。
 * 然后计算并显示消耗每加仑汽油行驶的英里数，显示小数点后面一位数字。
 * 接下来，使用1加仑大约3.785升，1英里大约为1.609千米，把单位是英里/加仑的值转换为升/100公里（欧洲通用的燃料消耗表示法），并显示结果，显示小数点后面1位数字。
 * 注意，美国采用的方案测量消耗单位燃料的行程（值越大越好），而欧洲则采用单位距离消耗的燃料测量方案（值越低越好）。
 * 使用#define创建符号常量或使用const限定符创建变量来表示两个转换系数。
 * */

#include <stdio.h>

int main(){
	double miles,gallons;
	double miles_per_gallon;
	const double gallon_to_liter=3.785;
	const double miles_to_km=1.609;
	double liters_per_100_km;
	printf("请输入里程（英里）：");
	scanf("%lf",&miles);
	printf("请输入耗油（加仑）：");
	scanf("%lf",&gallons);
	miles_per_gallon=miles/gallons;
	liters_per_100_km=(gallon_to_liter*gallons)/(miles*miles_to_km/100);
	printf("每加仑行驶英里数：%.1f\n",miles_per_gallon);
	printf("每百千米消耗升数：%.1f\n",liters_per_100_km);
	return 0;
}

/*
 * scanf("%lf")跟scanf("%f")有什么区别 ?
 *
 * 在C语言中，`scanf`函数用于从标准输入（通常是键盘）读取输入，并将其存储到指定的变量中。
 * `%lf`和`%f`是用于读取浮点数的格式化输入说明符，它们之间的主要区别在于接受的参数类型。
 * - `%lf` 用于读取`double`类型的浮点数。
 * - `%f` 用于读取`float`类型的浮点数。
 * 因此，如果要读取`double`类型的浮点数，应该使用`%lf`；如果要读取`float`类型的浮点数，应该使用`%f`。
 * 在早期版本的C语言标准中，`%lf`用于指定`double`类型的参数，而`%f`用于指定`float`类型的参数。
 * 然而，在C99标准中，`%lf`和`%f`都可以用于`double`类型的参数，因为C99标准对这两种情况进行了等效处理。
 * 但是在实践中，为了编程的清晰性，建议仍然使用`%lf`来读取`double`类型的值，`%f`来读取`float`类型的值。
 *
 *
 * 为什么打印的时候都用%f而不是double型用%lf ?
 *
 * 在C语言中，`printf`函数的格式化输出说明符`%f`既可以用于`float`类型的浮点数，也可以用于`double`类型的浮点数。
 * 实际上，C语言的标准将`%f`用于打印`double`类型的浮点数。
 * 这是因为在`printf`函数中，`%f`会自动将参数转换为`double`类型，而不管参数实际上是`float`类型还是`double`类型。
 * 因此，无论您打印`float`类型的变量还是`double`类型的变量，都可以使用`%f`作为格式化输出说明符。例如：
 * ```c
 * float float_var = 3.14159f;
 * double double_var = 3.14159;
 * printf("float_var: %f\n", float_var);
 * printf("double_var: %f\n", double_var);
 * ```
 * 在这个例子中，`printf`函数会自动将`float_var`和`double_var`转换为`double`类型，并使用`%f`格式化输出它们的值。
 * 因此，使用`%f`可以简化代码，并且在实践中通常更为常见。
 * */
